Subject: Repost of updated Section 7

From: "Steve Klein (254-5623)" <[email-masked]>
Date: Fri, 30 Sep 94 13:58:46 EDT

Alan Bartky asked be to resend him updates for version 012.  Seems
he has experienced a catastrophic disk crash and lost the previous
updates.  I took this opportunity to update my posting with the
comments I received.  Please look it over since this will be the
last opportunity.

I have one comment from Paul Brittain that I did not include since
it seemed to warrant further debate.  I will make a separate posting
for it.

Steve

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Alan, here is an updated section 7 based on discussions since dlsw012 was
posted.  I am also posting this to the Connect RIGlet to make sure I
have correctly consolidated comments from the group.

All affected lines have an asterisk ('*') in column one.

The explorer FSM at the beginning of section 7.2 is now a separate
section (7.4).

Steve

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

7.1. Data Link Switch States

   The Switch-to-Switch Protocols will be formally defined through a single stat
   machine.  The following table lists the eleven possible states.  A separate
   state machine is employed for each end-to-end circuit that is maintained by t
   Data Link Switch.

     State Name            Description
     ----------            -----------
     CIRCUIT_ESTABLISHED   The end-to-end circuit has been
                           established.  At this time LLC Type 1
                           services are available from end-to-end.
     CIRCUIT_PENDING       The target DLSw is awaiting a REACH_ACK
                           response to an ICANREACH message.
     CIRCUIT_RESTART       The DLSw that originated the reset is
                           awaiting the restart of the data link
                           and the DL_RESTARTED response to a
                           RESTART_DL message.
     CIRCUIT_START         The origin DLSw is awaiting a ICANREACH_cs in
                           response to a CANUREACH_cs message.
     CONNECTED             The end-to-end connection has been
                           established thereby allowing LLC Type 2
                           services from end-to-end in addition to
                           LLC Type 1 services.
     CONNECT_PENDING       The origin DLSw is awaiting the CONTACTED
                           response to a CONTACT message.
     CONTACT_PENDING       The target DLSw is awaiting the
                           DLC_CONTACTED confirmation to a DLC_CONTACT
                           signal (i.e., DLC is waiting for a UA
                           response to an SABME command).
     DISCONNECTED          The initial state with no circuit or
                           connection established, the DLSw is awaiting
                           either a CANUREACH, an ICANREACH, a
                           NETBIOS_NQ, or a NETBIOS_NR message.
     DISCONNECT_PENDING    The DLSw that originated the disconnect
                           is awaiting the DL_HALTED response to a
                           HALT_DL message.
     HALT_PENDING          The remote DLSw is awaiting the DLC_DL_HALTED
                           indication following the DLC_HALT_DL request
                           (i.e., DLC is waiting for a UA response to a
                           DISC command), due to receiving a HALT_DL
                           message.
     HALT_PENDING_NOACK    The remote DLSw is awaiting the DLC_DL_HALTED
                           indication following the DLC_HALT_DL request
                           (i.e., DLC is waiting for a UA response to a
                           DISC command), due to receiving a
                           HALT_DL_NOACK message.
     RESTART_PENDING       The remote DLSw is awaiting the DLC_DL_HALTED
                           indication following the DLC_HALT_DL request
                           (i.e., DLC is waiting for a UA response to a
                           DISC command), and the restart of the data
                           link.
     RESOLVE_PENDING       The target DLSw is awaiting either the
                           DLC_DL_STARTED indication following the
                           DLC_START_DL request (i.e., DLC is waiting
                           for a Test response as a result of sending a
                           Test command), or a NB_Name_Recognized
                           frame in response to a NB_Name_Query frame.

                   Table 2.  Data Link Switch States

   The DISCONNECT state is the initial state for a new circuit.  One end station
   starts the connection via a TEST or XID command (i.e., DLC_RESOLVE_C) or a

   NetBIOS Name Query command (not explicitly shown).  Upon receipt, the Data Li
   Switches exchange a set of CANUREACH_ex, CANUREACH_cs, ICANREACH and REACH_AC
   messages.  Upon completion of this four-legged exchange (note this was a "thr
   legged exchange" in RFC 1434), both Data Link Switches will be in the
   CIRCUIT_ESTABLISHED state.  Two pending states also exist during this exchang
   The RESOLVE_PENDING state is entered by the target Data Link Switch awaiting
   Test response to a Test Command and the CIRCUIT_PENDING state is entered by t
   target DLSw awaiting the REACH_ACK reply to an ICANREACH message.

   The CIRCUIT_ESTABLISHED state allows for the exchange of LLC Type 1 frames su
   as the XID exchanges between SNA stations that occurs prior to the establishm
   of a connection.  Also, datagram traffic (i.e., UI frames)  may be sent and
   received between the end stations. These exchanges use the XIDFRAME and
   DGRMFRAME messages sent between the Data Link Switches.

   In the CIRCUIT_ESTABLISHED state, the receipt of a SABME command (i.e.,
   DLC_CONTACTED) causes the origin DLSw to issue a CONTACT message, to send an
   supervisory frame (i.e., DLC_ENTER_BUSY) to the origin station, and to enter
   CONNECT_PENDING state awaiting a CONTACTED message.  The target DLSw, upon th
   receipt of a CONTACT message, will issue a SABME command (i.e., DLC_CONTACT)
   enter the Contact Pending state.  Once the UA response is received (i.e.,
   DLC_CONTACTED), the target DLSw sends a CONTACTED message and enters the
   CONNECTED state.  When received, the origin DLSw enters the Connected state a
   sends an RR supervisory frame (i.e., DLC_EXIT_BUSY).

   The CONNECTED state is the steady state for normal data flow once a connectio
   has been established.  Information frames (i.e., INFOFRAME messages) are simp
   sent back and forth between the end points of the connection.  This is the pa
   that should be optimized for performance.

   The connection is terminated upon the receipt of a DISC frame or under some
   other error condition detected by DLC (i.e., DLC_ERROR). Upon receipt of this
   indication, the DLSw will halt the local data link, send a HALT_DL message to
   the remote DLSw, and enter the DISCONNECT_PENDING State.  When the HALT_DL fr
   is received by the other DLSw, the local DLC is halted for this data link, a
   DL_HALTED message is returned, and the DISCONNECTED state is entered.  Receip
   of this DL_HALTED message causes the other DLSw to also enter the DISCONNECTE
   state.

   The CIRCUIT_RESTART state is entered if one of the Data Link Switches receive
   SABME command  (i.e., DLC_RESET) while in the CONNECTED state.  This causes a
   command to be returned to the origin station and a RESTART_DL message to be s
   to the remote Data Link Switch. This causes the remote data link to be halted
   and then restarted.  The remote DLSw will then send a DL_RESTARTED message ba
   to the first DLSw.  The receipt of the DL_RESTARTED message causes the first
   DLSw to issue a new CONTACT message, assuming that the local DLC has been
   contacted (i.e., the origin station has resent the SABME command).  This is
   eventually responded to by a CONTACTED message.  Following this exchange, bot
   Data Link Switches will return to the CONNECTED state.  If the local DLC has
   been contacted, the receipt of a DL_RESTARTED command causes the Data Link
   Switch to enter the CIRCUIT_ESTABLISHED state awaiting the receipt of a SABME
   command (i.e., DLC_CONTACTED signal).

   The HALT_PENDING and RESTART_DL states have only one input event and only one
   output action.  While in these states, the Data Link Switch is awaiting
   responses from the local station on the adjacent LAN (i.e., a UA response to
   DISC command). Also in the RESTART_PENDING state, the Data Link Switch will

   attempt to restart the data link prior to sending a DL_RESTARTED message.  Fo
   some implementations, the start of a data link involves the exchange of a Tes
   command/response on the adjacent LAN (i.e., DLC_START_DL).  For other
   implementations, this additional exchange may not be required.

7.2. State Transition Tables

   This section provides a detailed representation of the Data Link Switch, as
   document by a set of state machines.  The first state machine documents the
   sending and receiving of SSP messages.  Many of the transitions are dependent
   upon local signals between the Data Link Switch entity and one of the DLC
   entities.  These signals and their definitions are given in the following
   tables.

*
*  DLC Events:
*
     Event Name      Description
     ----------      -----------
     DLC_CONTACTED   Contact Indication:  DLC has received an SABME
                     command or DLC has received a UA response as a
                     result of sending an SABME command.
     DLC_DGRM        Datagram Indication:  DLC has received a UI frame.
     DLC_ERROR       Error condition indicated by DLC:  Such a
                     condition occurs when a DISC command is received
                     or when DLC experiences an unrecoverable error.
     DLC_INFO        Information Indication:  DLC has received an
                     Information (I) frame.
     DLC_DL_HALTED   Data Link Halted Indication:  DLC has
                     received a UA response to a DISC command.
     DLC_DL_STARTED  Data Link Started Indication:  DLC has
                     received a Test response from the null SAP.
     DLC_RESET       Reset Indication:  DLC has received an SABME
                     command during the time a connection is
                     currently active and has responded with DM.
     DLC_RESOLVE_C   Resolve Command Indication:  DLC has received
                     a Test command addressed to the null SAP, or an
                     XID command addressed to the null SAP.
*    DLC_RESOLVED    Resolve request:  DLC has received a TEST response
*                    frame (or equivalent for non-LAN DLCs) but has not
*                    reserved the resources required for a circuit yet.
     DLC_XID         XID Indication:  DLC has received an XID command
                     or response to a non-null SAP.

   Other Events:

        Event Name      Description
        ----------      -----------
        XPORT_FAILURE   Failure of the transport connection used by the
                        circuit.
        CS_TIMER_EXP    The CIRCUIT_START timer (started when the circuit
                        went into CIRCUIT_START state) has expired.

                       Table 3.  Local DLC Events

*
*  DLC Actions:
*
     Action Name     Description
     -----------     -----------
     DLC_CONTACT     Contact Station Request:  DLC will send a SABME
                     command or a UA response to an outstanding SABME
                     command.
     DLC_DGRM        Datagram Request:  DLC will send a UI frame.
     DLC_ENTER_BUSY  Enter Link Station Busy:  DLC will send an
                     RNR supervisory frame.
     DLC_EXIT_BUSY   Exit Link Station Busy:  DLC will send an RR
                     supervisory frame.
     DLC_HALT_DL     Halt Data Link Request:  DLC will send a DISC
                     command.
     DLC_INFO        Information Request:  DLC will send an I frame.
*    DLC_RESOLVE     Resolve request:  DLC should issue a TEST (or
*                    appropriate equivalent for non-LAN DLCs) but need
*                    not reserve the resources required for a circuit yet.
     DLC_RESOLVE_R   Resolve Response Request:  DLC will send a
                     Test response or XID response from the null SAP.
     DLC_START_DL    Start Data Link Request:  DLC will send a Test
                     command to the null SAP.
     DLC_XID         XID Request:  DLC will send an XID command or an
                     XID response.

   Other Actions:

     Action Name     Description
     ----------      -----------
     START_CS_TIMER  Start the CIRCUIT_START timer.

                         Table 4.  Local DLC Actions

*   DLC_RESOLVE_R and DLC_START_DL actions require the DLC to reserve the resour
*   necessary for a link station as they are used only when a circuit is about t
*   be started.  The DLC_RESOLVE action is used for topology explorer traffic an
*   does not require such resources to be reserved, though a DLC implementation
*   choose not to distinguish this from the DLC_START_DL action.  See section 7.
*   for details of the use of the DLC_RESOLVE and DLC_RESOLVED action and event
*   for explorer frames.

   The Data Link Switch may be described by a state transition table as document
   in the following sections.  Each of the states is described below in terms of
   the events, actions, and next state for each transition. If a particular even
   is not listed for a given state, no action and no state transition should occ
   for that event.  Any significant comments concerning the transitions within a
   given state are given immediately following the table representing the state.

   A separate state machine is maintained by the Data Link Switch for each end-t
   end circuit.  The number of circuits that may be supported by each Data Link
   Switch is a local implementation option.

*  The CANUREACH_ex, ICANREACH_ex, NETBIOS_NQ_ex, and NETBIOS_NR_ex are SSP
*  messages that are not associated with a particular circuit.  The processing o
*  these messages is covered in section 7.4.

********************************************************************************
*
*               delete
*
*  The CANUREACH_ex, ICANREACH_ex, NETBIOS_NQ_ex, and NETBIOS_NR_ex are SSP
*  messages that are not associated with a particular circuit.  The processing o
*  these messages is covered by the following table:
*
*     +-----------------------+-------------------------------------------+
*     |        Event          |                  Action(s)                |
*     +-----------------------+-------------------------------------------+
*     | Receive CANUREACH_ex  | Respond with ICANREACH_ex if it is known  |
*     |                       | that the destination MAC address can be   |
*     |                       | reached.  This can be determined using    |
*     |                       | cached information or using a             |
*     |                       | TEST command/TEST response exchange.      |
*     +-----------------------+-------------------------------------------+
*     | Receive NETBIOS_NQ_ex | Respond with NETBIOS_NR_ex if it is known |
*     |                       | that the destination NETBIOS name can be  |
*     |                       | reached, else send a NETBIOS NAME_QUERY   |
*     |                       | using the name contained in the SSP       |
*     |                       | message.  If a corresponding NETBIOS      |
*     |                       | NAME_RECOGNIZED is received, send it back |
*     |                       | in a NETBIOS_NR_ex to the originator of   |
*     |                       | the NETBIOS_NQ_ex.                        |
*     +-----------------------+-------------------------------------------+
********************************************************************************

7.2.1. DISCONNECTED State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive CANUREACH_cs | DLC_START_DL        | RESOLVE_PENDING      |
      +----------------------+---------------------+----------------------+
********************************************************************************
*
*               delete
*
*     | Receive ICANREACH_cs | Send REACH_ACK,     | CIRCUIT_ESTABLISHED  |
*     |                      | DLC_RESOLVE_R       |                      |
*     +----------------------+---------------------+----------------------+
********************************************************************************
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
********************************************************************************
*
*               delete
*
*     | Receive NETBIOS_NQ_cs| DLC_DGRM            | RESOLVE_PENDING      |
*     +----------------------+---------------------+----------------------+
*     | Receive NETBIOS_NR_cs| Send REACH_ACK,     | CIRCUIT_ESTABLISHED  |
*     |                      | DLC_DGRM            |                      |
*     +----------------------+---------------------+----------------------+
*     | DLC_RESOLVE_C        | Send CANUREACH_ex   |                      |
*     +----------------------+---------------------+----------------------+
********************************************************************************
      | DLC_XID              | If source route     | If CANUREACH_cs was  |
      |                      | bridged frame with  | sent:                |
      |                      | broadcast indicated:|   CIRCUIT_START      |
      |                      |   Send CANUREACH_ex |                      |
      |                      | else:               |                      |
      |                      |   Send CANUREACH_cs |                      |
      |                      |   START_CS_TIMER    |                      |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | If NETBIOS          |                      |
      |                      | NAME_QUERY:         |                      |
      |                      |  Send NETBIOS_NQ_ex |                      |
      |                      | else:               |                      |
      |                      |  Send DATAFRAME     |                      |
      +----------------------+---------------------+----------------------+
      | DLC_CONTACTED        | Send CANUREACH_cs   | CIRCUIT_START        |
      +----------------------+---------------------+----------------------+

   It is assumed that each Data Link Switch will build a set of topology tables
   giving the identity of each Data Link Switch that can reach a specific MAC
   address or a specific NetBIOS name.  This table can be built based upon the
*  origin address information received within CANUREACH messages or NETBIOS_NQ
*  messages and the target address information within ICANREACH messages or
*  NETBIOS_NR messages.  As a consequence, the amount of search traffic can be k
   to a minimum.

   Upon receipt of a Test command or XID command to the null SAP (i.e.,
   DLC_RESOLVE_C signal from DLC), the Data Link Switch will check the topology
*  table prior to sending the CANUREACH_cs message.  If the target MAC address i
*  the table, the CANUREACH_cs message will be sent to only those Data Link Swit
   that are known to be able to reach the given MAC address.  If the MAC address
*  not in the table, the CANUREACH_cs message will be sent to all known Data Lin
   Switches.  ******************************************************************
***************
*
*       delete
*
*             Since the destination link SAP (DSAP) value is null, the Target Li
*  SAP field in the CANUREACH message header is set equal to the Origin Link SAP
*  value.
********************************************************************************

   Upon receipt of a NB_Name_Query the Data Link Switch will check the topology
*  table prior to sending the NETBIOS_NQ_cs message.  If the target NetBIOS name
*  the table, the NETBIOS_NQ_cs message will be sent to only those Data Link Swi
   that are known to be able to reach the given NetBIOS name.  If the NetBIOS na
*  is not in the table, the NETBIOS_NQ_cs message will be sent to all known Data
   Switches.

   For SNA, the DISCONNECTED state is exited upon receipt of a CANUREACH_cs mess
   a prospective target Data Link Switch. **************************************
*******************************************
*
*                   delete
*
*                                         or upon receipt of an ICANREACH messag
*  by the origin Data Link Switch.  In the former case, ************************
*********************************************************
                                                        The Data Link Switch wil
   issue a Test command to the target station (i.e., DLC_START_DL signal is
   presented to DLC).  *********************************************************
************************
*
*    delete
*
*                      In the later case, a Test response is sent to the origin
*  station (i.e., DLC_RESOLVE_R will be issued) and a REACH_ACK message will be
*  returned to the target Data Link Switch.
********************************************************************************

*    Note 1-  Some implementations will also send a
     Test command to the station that originated the resolve procedure (i.e., a
     DLC_START_DL will be issued) in order to start the data link.

********************************************************************************
*
*   delete - NETBIOS is handled the same as SNA now.
*
*  For NetBIOS, the DISCONNECTED state is exited upon the receipt of a NETBIOS_N
*  message by the prospective target Data Link Switch, or upon the receipt of a
*  NETBIOS_NR message by the origin Data Link Switch.  In the former case, the D
*  Link Switch will send a NB_Name_Query frame.  In the later case, the Data Lin
*  Switch will send a NB_Name_Recognized frame to the origin station and a
*  REACH_ACK message will be returned to the target Data Link Switch.
*
*    Note 2-  Some implementations will also send a Test command (i.e., a
*    DLC_START_DL will be issued) to the station that originated the name
*    resolution in order to start the data link.
********************************************************************************

7.2.2. RESOLVE_PENDING State

      +----------------------+-----------------------+-----------------------+
      |        Event         |      Action(s)        |      Next State       |
      +----------------------+-----------------------+-----------------------+
      | Receive DATAFRAME    | DLC_DGRM              |                       |
      +----------------------+-----------------------+-----------------------+
      | DLC_DL_STARTED       | If LF value of        | If LF value of        |
      |                      | DLC_DL_STARTED        | DLC_DL_STARTED        |
      |                      | is greater than or    | is greater than or    |
      |                      | equal to LF Size of   | equal to LF Size of   |
      |                      | CANUREACH_cs or LF    | CANUREACH_cs or LF    |
      |                      | Size Control bit set: | Size Control bit set: |
      |                      |   Send ICANREACH      |   CIRCUIT_PENDING     |
      |                      | else:                 | else:                 |
      |                      |   Send DLC_HALT_DL    |   HALT_PENDING_NOACK  |
      +----------------------+-----------------------+-----------------------+
      | DLC_ERROR            |                       | DISCONNECTED          |
      +----------------------+-----------------------+-----------------------+
      | DLC_DGRM             | Send DATAFRAME        |                       |
      +----------------------+-----------------------+-----------------------+

********************************************************************************
*
*   replace this:
*
*  The RESOLVE_PENDING state is entered upon receipt of a CANUREACH message or a
*  NETBIOS_NQ message by the target DLSw.  In the former case, a data link is
*  started, causing a Test command to be sent by the DLC.  In the later case, a
*  NB_Name_Query frame is sent.  This frame is directed to a group MAC address.
********************************************************************************
*
*   with this:
*
*  The RESOLVE_PENDING state is entered upon receipt of a CANUREACH_cs
*  message by the target DLSw.  A data link is started, causing a Test
*  command to be sent by the DLC.
********************************************************************************

*  Any CANUREACH_cs messages received in the RESOLVE_PENDING state will be respo
   to if a DLC_DL_STARTED signal is received.  The Data Link Switch may also upd
   its topology information based upon the origin MAC address information in eac
   CANUREACH_cs message.

   Upon the receipt of a DLC_DL_STARTED signal in the RESOLVE_PENDING state, the
   Data Link Switch may update its topology table base upon the remote MAC addre
   information.
********************************************************************************
*
*   replace this:
*
*                The ICANREACH message should be returned to all Data Link Switc
*  that had sent a CANUREACH message.  In a similar fashion, the Data Link Switc
*  may update its topology table upon the receipt of a NB_Name_Recognized frame
*  a NETBIOS_NR message will be returned to all Data Link Switches that have sen
*  NETBIOS_NQ message.
********************************************************************************
*
*   with this:
*
*  Upon the receipt of a DLC_DL_STARTED signal in the RESOLVE_PENDING state, the
*  Data Link Switch may update its topology table base upon the remote MAC addre
*  information.  The ICANREACH_cs message must be returned to the first partner
*  DLSw from which a CANUREACH_cs was received for this circuit, or an
*  implementation may optionally reply to all partners from which the CANUREACH_
*  was received.
********************************************************************************

   The RESOLVE_PENDING state is exited once the data link has been started (i.e.
   DLC_DL_STARTED signal is received as a result of a Test response received by
*  DLC).  The target Data Link Switch will then enter the CIRCUIT_PENDING
   state.

********************************************************************************
*
*   delete
*
*    Note:  Some implementations will also send a Test command in order to start
*    the data link to the station that responded to the Name Query frame (i.e.,
*    DLC_START_DL will be issued).
********************************************************************************

7.2.3. CIRCUIT_START State

      +----------------------+---------------------+-------------------------+
      |        Event         |      Action(s)      |      Next State         |
      +----------------------+---------------------+-------------------------+
      | Receive CANUREACH_cs | If origin MAC addr  | If DLC_START_DL         |
      | for circuit in       | in CANUREACH_cs is  | issued:                 |
      | opposite direction   | greater than origin |   RESOLVE_PENDING       |
      |                      | MAC addr of circuit:|                         |
      |                      |   DLC_START_DL      |                         |
      |                      | else:               |                         |
      |                      |   no action taken   |                         |
      +----------------------+---------------------+-------------------------+
      | Receive ICANREACH_cs | If LF Size Control  | If LF Size Control      |
      |                      | bit set and LF Size | bit set and LF Size     |
      |                      | is not negotiable:  | is not negotiable:      |
      |                      |   Send HALT_DL_NOACK|   DISCONNECTED          |
      |                      | else:               | else:                   |
      |                      |   Send REACH_ACK,   |   If Connected:         |
*     |                      |   Send appropriate  |     CONNECT_PENDING     |
*     |                      |   SSP message based |   else:                 |
*     |                      |   on the event      |     CIRCUIT_ESTABLISHED |
*     |                      |   that generated    |                         |
*     |                      |   CANUREACH_cs      |                         |
*     |                      |   (See Note)        |                         |
      |                      |                     |                         |
      +----------------------+---------------------+-------------------------+
      | DLC_DGRM             | Send DATAFRAME      |                         |
      +----------------------+---------------------+-------------------------+
*     | DLC_ERROR            |                     | DISCONNECTED            |
*     +----------------------+---------------------+-------------------------+
      | CS_TIMER_EXP         |                     | DISCONNECTED            |
      +----------------------+---------------------+-------------------------+
*     | XPORT_FAILURE        |                     | DISCONNECTED            |
*     +----------------------+---------------------+-------------------------+

*   The CIRCUIT_START state is entered by the origin Data_Link_Switch
*   whn a DLC_XID or DLC_CONTACTED signal has been received from the
*   DLC.  The origin Data Link Switch will check its topology table prior
*   to sending the CANUREACH_cs message.  If the target MAC address is in
*   the table, the CANUREACH_cs message will be sent to only those Data Link
*   Data Link Switches that are known to be able to reach the given MAC
*   address.  If the MAC address is not in the table, the CANUREACH_cs
*   message will be sent to all known Data Link Switches.
*
*   The CIRCUIT_START state is exited upon receipt of an ICANREACH_cs
*   message.  A REACH_ACK message will be returned to the target Data Link
*   Switch.  If the CIRCUIT_START state was entered due to a DLC_XID
*   signal, an XIDFRAME message containing the XID will be sent to
*   to the target Data Link Switch.  If the CIRCUIT_START state was en   tered
*   due to a DLC_CONTACTED signal, a CONTACT message will be sent to
*   to the target Data Link Switch.

*     Note:  For example, DLC_XID - send XIDFRAME, DLC_CONTACTED - send CONTA

7.2.4. CIRCUIT_PENDING State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive CONTACT      | DLC_CONTACT         | CONTACT_PENDING      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL      | DLC_HALT_DL         | HALT_PENDING         |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL_NOACK| DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
      | Receive REACH_ACK    | If Connected:       | If Connected:        |
      |                      |  Send CONTACT       |  CONNECT_PENDING,    |
      |                      |                     | else:                |
      |                      |                     |  CIRCUIT_ESTABLISHED |
      +----------------------+---------------------+----------------------+
      | Receive XIDFRAME     | DLC_XID             |                      |
      +----------------------+---------------------+----------------------+
      | Receive DGRMFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | DLC_CONTACTED        | If UA is sent in    |                      |
      |                      | response to SABME:  |                      |
      |                      |   DLC_ENTER_BUSY    |                      |
      |                      | else:               |                      |
      |                      |   no action taken   |                      |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send HALT_DL        | DISCONNECT_PENDING   |
      +----------------------+---------------------+----------------------+
      | DLC_XID              | Send XIDFRAME       |                      |
      +----------------------+---------------------+----------------------+
*     | DLC_DGRM             | Send DATAFRAME      |                      |
      +----------------------+---------------------+----------------------+
      | XPORT_FAILURE        | DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The CIRCUIT_PENDING state is entered by the target Data Link Switch following
*  the sending of an ICANREACH_cs message.  In
   this state it is awaiting the reception of a REACH_ACK message from the origi
   Data Link Switch.  If a connection does not exist with the target station (i.
   the normal case), the Data Link Switch will enter the CIRCUIT_ESTABLISHED sta

   If the target Data Link Switch happens to receive a SABME command from the
   target station while in the CIRCUIT_PENDING state (i.e., a DLC_CONTACTED sign
   received from the DLC), the reception of the REACH_ACK message will cause the
   Data Link Switch to enter the CONNECT_PENDING state and to send a CONTACT
   message to the other Data Link Switch.
**  delete ----------------------------->  Thus the target Data Link Switch has
** assumed the role of the origin Data Link Switch.

7.2.5. CONNECT_PENDING State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive CONTACTED    | If UA was sent in   | CONNECTED            |
      |                      | response to SABME:  |                      |
      |                      |   DLC_EXIT_BUSY     |                      |
      |                      | else:               |                      |
      |                      |   DLC_CONTACT       |                      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL      | DLC_HALT_DL         | HALT_PENDING         |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL_NOACK| DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
      | Receive DGRMFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
*     | Receive ICANREACH_cs | Send HALT_DL_NOACK  |                      |
      +----------------------+---------------------+----------------------+
*****************************************************************************
*                                                                           *
*     delete                                                                *
*                                                                           *
*     | Receive NETBIOS_NR   | Send HALT_DL_NOACK  |                      | *
*     +----------------------+---------------------+----------------------+ *
*****************************************************************************
      | DLC_RESET            | Send RESTART_DL     | CIRCUIT_RESTART      |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send HALT_DL        | DISCONNECT_PENDING   |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | Send DGRMFRAME      |                      |
      +----------------------+---------------------+----------------------+
      | XPORT_FAILURE        | DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The CONNECT_PENDING state is entered by the origin Data Link Switch when a
   DLC_CONTACTED signal has been received from the DLC (i.e., a SABME command ha
   been received).  A CONTACT message is then issued.  The state is exited upon
   receipt of a CONTACTED message from the target Data Link Switch.  If a DLC_RE
   signal is received, the local data link is restarted and a RESTART_DL message
   sent to the remote DLSw.

*  An ICANREACH_cs received after the transition to CONNECT_PENDING state
*  indicates that more than one CANUREACH_cs was sent at circuit establishme
*  time and the target station was found by more than one Data Link Switch
*  partner.  A HALT_DL_NOACK is sent to halt the data link started by the
*  Data Link Switch partner that originated this ICANREACH_cs.

     Note:  Some implementations will also send a Test command in order to resta
     the data link to the station that sent the SABME command (i.e., a DLC_START
     will be issued).

7.2.6. CIRCUIT_ESTABLISHED State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive CONTACT      | DLC_CONTACT         | CONTACT_PENDING      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL      | DLC_HALT_DL         | HALT_PENDING         |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL_NOACK| DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
      | Receive XIDFRAME     | DLC_XID             |                      |
      +----------------------+---------------------+----------------------+
      | Receive DGRMFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
*     | Receive ICANREACH_cs | Send HALT_DL_NOACK  |                      |
      +----------------------+---------------------+----------------------+
*****************************************************************************
*                                                                           *
*     delete                                                                *
*                                                                           *
      | Receive NETBIOS_NR   | Send HALT_DL_NOACK  |                      |
      +----------------------+---------------------+----------------------+
*****************************************************************************
      | DLC_CONTACTED        | Send CONTACT        | CONNECT_PENDING      |
      |                      | If UA is sent in    |                      |
      |                      | response to SABME:  |                      |
      |                      |   DLC_ENTER_BUSY    |                      |
      |                      | else:               |                      |
      |                      |   no action taken   |                      |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send HALT_DL        | DISCONNECT_PENDING   |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | Send DGRMFRAME      |                      |
      +----------------------+---------------------+----------------------+
      | DLC_XID              | Send XIDFRAME       |                      |
      +----------------------+---------------------+----------------------+
      | XPORT_FAILURE        | DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The CIRCUIT_ESTABLISHED state is entered by the origin Data Link Switch from
   DISCONNECTED state, and by the target Data Link Switch from the CIRCUIT_PENDI
   state.  The state is exited when a connection is started (i.e., DLC receives
   SABME command).  The next state is CONTACT_PENDING for the target Data Link
   Switch and CONNECT_PENDING for the origin Data Link Switch.

*  An ICANREACH_cs received after the transition to CONNECTED state indicates
*  that more than one CANUREACH_cs was sent at circuit establishment time
*  and the target station was found by more than one Data Link Switch partner
*  A HALT_DL_NOACK is sent to halt the data link started by the Data Link
*  Switch partner that originated this ICANREACH_cs.

7.2.7. CONTACT_PENDING State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL      | DLC_HALT_DL         | HALT_PENDING         |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL_NOACK| DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
      | Receive RESTART_DL   | DLC_HALT_DL         | RESTART_PENDING      |
      +----------------------+---------------------+----------------------+
      | Receive DGRMFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | DLC_CONTACTED        | Send CONTACTED      | CONNECTED            |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send HALT_DL        | DISCONNECT_PENDING   |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | Send DGRMFRAME      |                      |
      +----------------------+---------------------+----------------------+
      | XPORT_FAILURE        | DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The CONTACT_PENDING state is entered by the target Data Link Switch upon the
   receipt of a CONTACT message.  This causes the Data Link Switch to issue a
   DLC_CONTACT signal to the DLC (i.e., DLC sends a SABME command).  This state
   then exited upon the receipt of a DLC_CONTACTED signal from the DLC (i.e., a
   response received).

   If a RESTART_DL message is received, indicating that the remote Data Link Swi
   has received a DLC_RESET signal, the local Data Link Switch will send a DISC
   command frame on the adjacent LAN (i.e., DLC_HALT_DL signal) and enter the
   RESTART_PENDING state.

7.2.8. CONNECTED State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL      | DLC_HALT_DL         | HALT_PENDING         |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL_NOACK| DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
      | Receive RESTART_DL   | DLC_HALT_DL         | RESTART_PENDING      |
      +----------------------+---------------------+----------------------+
      | Receive DGRMFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | Receive INFOFRAME    | DLC_INFO            |                      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | Receive XIDFRAME     | If non-activation   |                      |
      |                      | XID3:               |                      |
      |                      |   DLC_XID           |                      |
      +----------------------+---------------------+----------------------+
*     | Receive ICANREACH_cs | Send HALT_DL_NOACK  |                      |
      +----------------------+---------------------+----------------------+
*****************************************************************************
*                                                                           *
*     delete                                                                *
*                                                                           *
      | Receive NETBIOS_NR   | Send HALT_DL_NOACK  |                      |
      +----------------------+---------------------+----------------------+
*****************************************************************************
      | Receive ENTER_BUSY   | DLC_ENTER_BUSY      |                      |
      +----------------------+---------------------+----------------------+
      | Receive EXIT_BUSY    | DLC_EXIT_BUSY       |                      |
      +----------------------+---------------------+----------------------+
      | Rec TEST_CIRCUIT_REQ | Snd TEST_CIRCUIT_RSP|                      |
      +----------------------+---------------------+----------------------+
      | DLC_RESET            | Send RESTART_DL     | CIRCUIT_RESTART      |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send HALT_DL        | DISCONNECT_PENDING   |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | Send DGRMFRAME      |                      |
      +----------------------+---------------------+----------------------+
      | DLC_INFO             | Send INFOFRAME      |                      |
      +----------------------+---------------------+----------------------+
      | DLC_XID              | If non-activation   |                      |
      |                      | XID3:               |                      |
      |                      |   Send XIDFRAME     |                      |
      +----------------------+---------------------+----------------------+
      | XPORT_FAILURE        | DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The CONNECTED state is entered by the origin Data Link Switch from the
   CONNECT_PENDING state upon the receipt of a CONTACTED message.  The CONNECTED
   state is entered by the target Data Link Switch from the CONTACT_PENDING stat
   upon the receipt of a DLC_CONTACTED signal.  At this time, the target Data Li
   Switch will return a CONTACTED message to the origin Data Link Switch.

   The CONNECTED state is exited usually under one of two conditions: a DLC_ERRO
   signal received from the DLC (e.g., a DISC command received by the local DLC)
   or a HALT_DL message received from the other Data Link Switch (e.g., a DISC
   command received by the remote DLC).

   A SABME command (i.e., a DLC_RESET signal) received by either Data Link Switc
   will also cause the two Data Link Switches to leave the CONNECTED state and
   eventually restart a new circuit.

*  An ICANREACH_cs received after the transition to CONNECTED state indicate
*  that more than one CANUREACH_cs was sent at circuit establishment time
*  and the target station was found by more than one Data Link Switch partne
*  A HALT_DL_NOACK is sent to halt the data link started by the Data Link
*  Switch partner that originated this ICANREACH_cs.

     Note:  Some implementations will also send a Test command in order to  rest
     the data link to the station that sent the SABME command  (i.e., a
     DLC_START_DL will be issued).

   Following the receipt of a reset signal, the Data Link Switch will send a
   RESTART_DL message to the other Data Link Switch and will enter the
   CIRCUIT_RESTART state.  Upon the receipt of the RESTART_DL message, the remot
   Data Link Switch will send a DISC command (i.e., DLC_HALT_DL signal) and ente
   the RESTART_PENDING state.

7.2.9. CIRCUIT_RESTART State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive DL_RESTARTED | If Connected:       | If Connected:        |
      |                      |  Send CONTACT       |  CONNECT_PENDING,    |
      |                      |                     | else:                |
      |                      |                     |  CIRCUIT_ESTABLISHED |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL_NOACK| DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
*     | Receive DGRMFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send HALT_DL        | DISCONNECT_PENDING   |
      +----------------------+---------------------+----------------------+
*     | DLC_DGRM             | Send DGRMFRAME      |                      |
      +----------------------+---------------------+----------------------+
      | XPORT_FAILURE        | DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The CIRCUIT_RESTART state is entered if a DLC_RESET signal is received from t
   local DLC.  This was caused by the receipt of a SABME command while a connect
   was currently active.  A DM response will be issued to the SABME command and
   Data Link Switch will attempt to restart the end-to- end circuit.

   The CIRCUIT_RESTART state is exited through one of two transitions.  The next
   state depends upon the time the local DLC has reached the contacted state (i.
   a DLC_CONTACTED signal is presented) relative to the receipt of the DL_RESTAR
   message.  This signal is caused by the origin station resending the SABME
   command that initially caused the DATA Link Switch to enter the CIRCUIT_RESTA
   state.  The two cases are as follows:

          1) DL_RESTARTED message received before the DLC_CONTACTED signal-  In
          this case, the CIRCUIT_ESTABLISHED state is entered.

          2) DL_RESTARTED message received after the DLC_CONTACTED signal-  In t
          case, the CONNECT_PENDING state is entered.

7.2.10. DISCONNECT_PENDING State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive DL_HALTED    |                     | DISCONNECTED         |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL      | Send DL_HALTED      |                      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL_NOACK|                     | DISCONNECTED         |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | Send DATAFRAME      |                      |
      +----------------------+---------------------+----------------------+
      | XPORT_FAILURE        |                     | DISCONNECTED         |
      +----------------------+---------------------+----------------------+

   The DISCONNECT_PENDING state is entered when a DLC_ERROR signal is received f
*  the local DLC.  Upon receipt of this signal, a HALT_DL message is sent.  Once
   DL_HALTED message is received, the state is exited, and the Data Link Switch
   enters the DISCONNECTED state.

7.2.11. RESTART_PENDING State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL_NOACK|                     | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
*     | Receive DGRMFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | DLC_DL_HALTED        | Send DL_RESTARTED   | CIRCUIT_ESTABLISHED  |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send HALT_DL        | DISCONNECT_PENDING   |
      +----------------------+---------------------+----------------------+
*     | DLC_DGRM             | Send DGRMFRAME      |                      |
      +----------------------+---------------------+----------------------+
      | XPORT_FAILURE        | DLC_HALT_DL         | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The RESTART_PENDING state is entered upon the receipt of a RESTART_DL message
   from the remote DLSw while the local Data Link Switch is in either the
   CONTACT_PENDING state or the CONNECTED state.  These cause the local DLC to
   issue a DISC command.  Upon the receipt of the UA response (DLC_DL_HALTED), t
   data link is restarted, a DL_RESTARTED message is returned to the remote DLSw
   and the CIRCUIT_ESTABLISHED state is entered.

     Note:  Some implementations will send a Test command in order to restart th
     data link to the target station (i.e., a DLC_START_DL will be issued) prior
     sending the DL_RESTARTED message.

7.2.12. HALT_PENDING State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive HALT_DL_NOACK|                     | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | DLC_DL_HALTED        | Send DL_HALTED      | DISCONNECTED         |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            | Send DL_HALTED      | DISCONNECTED         |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | Send DATAFRAME      |                      |
      +----------------------+---------------------+----------------------+
*     | XPORT_FAILURE        |                     | HALT_PENDING_NOACK   |
      +----------------------+---------------------+----------------------+

   The HALT_PENDING state is entered upon the receipt of a HALT_DL message.  Thi
   causes the local DLC to issue a DISC command.  Upon the receipt of the UA
   response (DLC_DL_HALTED), a DL_HALTED message is returned to the remote DLSw
   the DISCONNECTED state is entered.

7.2.13. HALT_PENDING_NOACK State

      +----------------------+---------------------+----------------------+
      |        Event         |      Action(s)      |      Next State      |
      +----------------------+---------------------+----------------------+
      | Receive DATAFRAME    | DLC_DGRM            |                      |
      +----------------------+---------------------+----------------------+
      | DLC_DL_HALTED        |                     | DISCONNECTED         |
      +----------------------+---------------------+----------------------+
      | DLC_ERROR            |                     | DISCONNECTED         |
      +----------------------+---------------------+----------------------+
      | DLC_DGRM             | Send DATAFRAME      |                      |
      +----------------------+---------------------+----------------------+

*  The HALT_PENDING state is entered upon the receipt of a HALT_DL message.
*  causes the local DLC to issue a DISC command.  Upon the receipt of the UA
*  response (DLC_DL_HALTED), the DISCONNECTED state is entered.

7.3. NetBIOS Datagrams

   The NetBIOS protocols use a number of UI frames for directory services and th
   transmission of datagrams.  Most of these frames are directed to a group MAC
   address (GA) with the routing information field indicating spanning tree
*  explorer (STE).  The NB_Add_Name_Response and NB_Name_Recognized frames are
*  directed to a specific MAC address with the routing information field
*  indicating an all routes explorer frame (ARE).  The NB_Status_Response frame
*  is directed to a specific MAC address with the routing information field
*  indicating a specifically routed frame (SRF).  The handling of these frames i
   summarized in the following table.

   +---------------------------+------------------+--------------------+
   |          Event            |     Action(s)    |      Comment       |
   +---------------------------+------------------+--------------------+
   | DLC_DGRM for NETBIOS      | Send NETBIOS_ANQ | Transmitted to all |
   |  group address:           |                  |   remote DLSw       |
   |   NB_Add_Name_Query       |                  |                    |
   +---------------------------+------------------+--------------------+
   | DLC_DGRM for a specific   | Send NETBIOS_ANR | Transmitted to     |
   |  address:                 |                  |   specific DLSw     |
   |   NB_Add_Name_Response    |                  |                    |
   +---------------------------+------------------+--------------------+
   | DLC_DGRM for a specific   | Send DATAFRAME   | Transmitted to all |
   |  address:                 |                  |   remote DLSw       |
   |   NB_Status_Response      |                  |                    |
   +---------------------------+------------------+--------------------+
   | DLC_DGRM for NETBIOS      | Send DATAFRAME   | Transmitted to all |
   |  group address:           |                  |   remote DLSw       |
   |   NB_Name_in_Conflict     |                  |                    |
   |   NB_Add_Group_Name_Query |                  |                    |
   |   NB_Datagram,            |                  |                    |
   |   NB_Datagram_Broadcast   |                  |                    |
   |   NB_Status_Query         |                  |                    |
   |   NB_Terminate_Trace      |                  |                    |
   +---------------------------+------------------+--------------------+

                      Table 5.  NetBIOS DLC Frames

   The above actions do not apply in the following states: CIRCUIT_ESTABLISHED,
   CONTACT_PENDING, CONNECT_PENDING, CONNECTED, and CIRCUIT_PENDING.  The handli
   of the remaining two UI frames used by NetBIOS systems, NB_Name_Query and
   NB_Name_Recognized, are documented as part of the DLSw state machine in the
   previous section (i.e., DISCONNECTED and RESOLVE_PENDING states).  Furthermor
   the handling of NetBIOS datagrams (i.e., NB_Datagram) sent to a specific MAC
   address is also governed by the DLSw state machine.

     Note:  Some implementations also issue Test frames during the exchange of t
     NetBIOS, NB_Name_Query and NB_Name_Recognized.  This exchange of protocol d
     units occurs during the start of a data link and is used to determine the
     routing information.  Most other implementations of NetBIOS will use the
     NB_Name_Query/NB_Name_Recognized exchange to determine routes in conjunctio
     with resolving the NetBIOS names.  These differences are not reflected in t
     SSP protocols.

   The handling of the NetBIOS specific SSP messages is given in the following
   table.

   +---------------+-------------------------+-------------------------+
   |     Event     |        Action(s)        |         Comment         |
   +---------------+-------------------------+-------------------------+
   | NETBIOS_ANQ   | DLC_DGRM:               | Routed STE              |
   |               |    NB_Add_Name_Query    | (NETBIOS Group Address) |
   +---------------+-------------------------+-------------------------+
*  | NETBIOS_ANR   | DLC_DGRM:               | Routed ARE              |
   |               |    NB_Add_Name_Response | (Specific MAC Address)  |
   +---------------+-------------------------+-------------------------+
   | NETBIOS_NQ_ex | DLC_DGRM:               | Routed STE              |
   |               |    NB_Name_Query        | (NETBIOS Group Address) |
   +---------------+-------------------------+-------------------------+
   | NETBIOS_NQ_cs | DLC_DGRM:               | Routed STE              |
   |               |    NB_Name_Query        | (NETBIOS Group Address) |
   +---------------+-------------------------+-------------------------+
*  | NETBIOS_NR_ex | DLC_DGRM:               | Routed ARE              |
   |               |    NB_Name_Recognized   | (Specific MAC Address)  |
   +---------------+-------------------------+-------------------------+
*  | NETBIOS_NR_cs | DLC_DGRM:               | Routed ARE              |
   |               |    NB_Name_Recognized   | (Specific MAC Address)  |
   +---------------+-------------------------+-------------------------+
*  | DATAFRAME     | DLC_DGRM                | If NB_Status_Response:  |
*  |               |                         |  Routed ARE             |
*  |               |                         |  (Specific MAC Address) |
*  |               |                         | Else:                   |
*  |               |                         |  Routed STE             |
   |               |                         |  (NETBIOS Group Address)|
   +---------------+-------------------------+-------------------------+

                      Table 6.  NetBIOS SSP Messages

   The above actions apply to all DLSw states.  The handling of NetBIOS datagram
   sent within DGRMFRAME messages is governed by the DLSw state machine.  The
   DGRMFRAME message type is employed instead of the DATAFRAME message type once
   the end-to-end circuit has been established.  At that time, the message is
   addressed according to the pair of Circuit IDs in the message header instead
   relying upon the MAC address information in the token ring header.

* Sections 7.4 and 7.5 are all new so I'll leave off the asterisks.
* Sections 7.4 and 7.5 are all new so I'll leave off the asterisks.
* Sections 7.4 and 7.5 are all new so I'll leave off the asterisks.

7.4     Explorer Traffic

The CANUREACH_ex, ICANREACH_ex, NETBIOS_NQ_ex, and NETBIOS_NR_ex SSP
messages explore the topology of the DLSw cloud and the networks attached to
it.  These explorer frames are used to determine the DLSw partners
through which a MAC or NetBIOS name can be accessed.  This information may
optionally be cached to reduce explorer traffic in the DLSw cloud.

If a DLSw is aware from cached information that a given MAC address or NetBIOS
name is accessible through a given partner DLSw, it should direct all circuit
setup attempts to that partner.  If the circuit setup fails, or no such data is
available in the MAC or name cache database, the DLSw may fallback to issuing
the setup attempt to all DLSw partners on the assumption that the cached data
is now out of date.  The mechanism for determining when to use such a fallback
is implementation defined.

DLSW implementations may also use a local MAC cache to enable responses
to CANUREACH_ex requests to be issued without the need for TEST frame exchange
(or equivalent) until the CANUREACH_cs is received.  Again, the fallback
mechanism for determining when such local cache data is out-of-date is
implementation defined.

The use of either cache is an optional function in DLSw.  An implementation may
choose to always issue explorer frames or to use either or both types of cache.

The following sections describe the FSMs used for explorer frames.  The DLC
events and actions are a subset of those described in section 7.2 for the main
circuit FSM.

7.4.1    CANUREACH/ICANREACH Explorer FSM

The FSM described below is used to handle explorer frames routed by MAC address.
There is one instance of this FSM for each Data Link ID (target and Origin
MAC/SAP pair) for which explorer traffic is flowing.  The states in this FSM are
as follows.

     State Name            Description
     ----------            -----------
     RESET                 The initial state.
     SENT_EX               Local DLSw has issued an explorer message
     RECEIVED_EX           Local DLSw has received an explorer message

7.4.1.1  RESET State

    +----------------------+---------------------+----------------------+
    |        Event         |      Action(s)      |      Next State      |
    +----------------------+---------------------+----------------------+
    | Receive CANUREACH_ex | If replying from    | If DLC_RESOLVE sent, |
    |                      | cache, send         |   RECEIVED_EX        |
    |                      | ICANREACH_ex        |                      |
    |                      | else if allowed to  |                      |
    |                      | test availability,  |                      |
    |                      | issue DLC_RESOLVE.  |                      |
    |                      | Optionally update   |                      |
    |                      | cache.              |                      |
    +----------------------+---------------------+----------------------+
    | Receive ICANREACH_ex | Optionally update   | RESET                |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+
    | DLC_RESOLVE_C        | Send CANUREACH_ex   | SENT_EX              |
    +----------------------+---------------------+----------------------+

7.4.1.2  SENT_EX State

    +----------------------+---------------------+----------------------+
    |        Event         |      Action(s)      |      Next State      |
    +----------------------+---------------------+----------------------+
    | Receive ICANREACH_ex | DLC_RESOLVE_R       | RESET                |
    |                      | Optionally update   |                      |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+
    | DLC_RESOLVE_C        |                     | SENT_EX              |
    +----------------------+---------------------+----------------------+

An implementation may choose whether to handle explorer frame crossover
either by using entirely separate FSM instances and simply allowing both ends
to issue TEST frames, or by detecting a reverse CANUREACH_ex frame here and
issuing an ICANREACH_ex message and DLC_RESOLVE_R action.

7.4.1.3  RECEIVED_EX State

    +----------------------+---------------------+----------------------+
    |        Event         |      Action(s)      |      Next State      |
    +----------------------+---------------------+----------------------+
    | Receive CANUREACH_ex | Optionally update   | RECEIVED_EX          |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+
    | Receive ICANREACH_ex |                     | RECEIVED_EX          |
    +----------------------+---------------------+----------------------+
    | DLC_RESOLVED         | Send ICANREACH_ex   | RESET                |
    |                      | Optionally update   |                      |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+

An implementation may choose whether to handle explorer frame corssover
either by using entirely separate FSM instances and simply allowing both ends
to issue TEST frames, or by detecting such a reverse DLC_RESOLVE_C event here
and issuing an ICANREACH_ex message and DLC_RESOLVE_R action.

7.4.2   NETBIOS_NQ/NR Explorer FSM

The FSM described below is used to handle explorer frames routed by NetBIOS
name.  There is one instance of this FSM for each unique combination of Source
Name, Destination Name, Data 2 field and Response Correlator.

     State Name            Description
     ----------            -----------
     RESET                 The initial state.
     SENT_EX               Local DLSw has issued an explorer message
     RECEIVED_EX           Local DLSw has received an explorer message
     SENT_REC_EX           An explorer frame has been both sent and received for
                           the same (potential) NetBIOS circuit.

7.4.2.1  RESET State

    +----------------------+---------------------+----------------------+
    |        Event         |      Action(s)      |      Next State      |
    +----------------------+---------------------+----------------------+
    | Receive NETBIOS_NQ_ex| DLC_DGRM(NAME_QUERY)| RECEIVED_EX          |
    |                      | Optionally update   |                      |
    |                      | cache.              |                      |
    +----------------------+---------------------+----------------------+
    | Receive NETBIOS_NR_ex| Optionally update   | RESET                |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+
    | DLC_DGRM (NAME_QUERY)| Send NETBIOS_NQ_ex  | SENT_EX              |
    +----------------------+---------------------+----------------------+

7.4.2.2  SENT_EX State

    +----------------------+---------------------+----------------------+
    |        Event         |      Action(s)      |      Next State      |
    +----------------------+---------------------+----------------------+
    | Receive NETBIOS_NQ_ex| DLC_DGRM(NAME_QUERY)| SENT_REC_EX          |
    |                      | Optionally update   |                      |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+
    | Receive NETBIOS_NR_ex| DLC_DGRM(NAME_RECOG)| RESET                |
    |                      | Optionally update   |                      |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+
    | DLC_DGRM (NAME_QUERY)| Send NETBIOS_NQ_ex  | SENT_EX              |
    | (different local     | Optionally update   |                      |
    |  session number than | cache               |                      |
    |  existing searches)  |                     |                      |
    +----------------------+---------------------+----------------------+

7.4.2.3  RECEIVED_EX State

    +----------------------+---------------------+----------------------+
    |        Event         |      Action(s)      |      Next State      |
    +----------------------+---------------------+----------------------+
    | Receive NETBIOS_NQ_ex| DLC_DGRM(NAME_QUERY)| RECEIVED_EX          |
    |                      | Optionally update   |                      |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+
    | Receive NETBIOS_NR_ex|                     | RECEIVED_EX          |
    +----------------------+---------------------+----------------------+
    | DLC_DGRM (NAME_QUERY)| Send NETBIOS_NQ_ex  | SENT_REC_EX          |
    |                      | Optionally update   |                      |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+
    | DLC_DGRM (NAME_RECOG)| Send NETBIOS_NR_ex  | RESET                |
    |                      | Optionally update   |                      |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+

7.4.2.4  SENT_REC_EX State

    +----------------------+---------------------+----------------------+
    |        Event         |      Action(s)      |      Next State      |
    +----------------------+---------------------+----------------------+
    | Receive NETBIOS_NQ_ex| DLC_DGRM(NAME_QUERY)| SENT_REC_EX          |
    |                      | Optionally update   |                      |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+
    | Receive NETBIOS_NR_ex| DLC_DGRM(NAME_RECOG)| RECEIVED_EX          |
    |                      | Optionally update   |                      |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+
    | DLC_DGRM (NAME_QUERY)| Send NETBIOS_NQ_ex  | SENT_REC_EX          |
    | (different local     | Optionally update   |                      |
    |  session number than | cache               |                      |
    |  existing searches)  |                     |                      |
    +----------------------+---------------------+----------------------+
    | DLC_DGRM (NAME_RECOG)| Send NETBIOS_NR_ex  | SENT_EX              |
    |                      | Optionally update   |                      |
    |                      | cache               |                      |
    +----------------------+---------------------+----------------------+

This state is required if an implementation wishes to manage NQ/NR crossover
cases from a single FSM instance by detecting 'opposite' NAME_QUERY attempts
between the same two NetBIOS names.  If separate FSM instances are used instead,
this state is not required and the transitions to it from other states can be
removed.

7.4.2.5   NetBIOS Session Numbers

NetBIOS NAME_QUERY and NAME_RECOGNIZED frames exchange NetBIOS session numbers
between the end stations.  For correct NetBIOS operation over DLSw, it is
important that all SSP NETBIOS_NQ_ex frames received by a DLSw cause NetBIOS
NAME_QUERY frames to flow on the LAN with the new session number from the
NETBIOS_NQ_ex.  These frames cannot be replied to from a cache of locally
available NetBIOS names in the same way that MAC addresses and CANUREACH_ex
messages can be handled.

Also, NAME_QUERY messages are normally retried several times on the LAN.
The generation and absorption of such frames is outside the scope of the FSM
defined above.